package com.eastjet.equipment.service.impl;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.eastjet.equipment.mapper.InspectionDetailsMapper;
import com.eastjet.equipment.service.DeviceRulesService;
import com.eastjet.equipment.service.InspectionDetailsService;
import com.eastjet.equipment.util.CodeRules;
import com.eastjet.equipment.util.PageUtil;
import com.eastjet.equipment.util.RedisUtil;
import com.eastjet.maintenance.domain.*;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author 杨博文
 * @description 针对表【inspection_details(巡检明细)】的数据库操作Service实现
 * @createDate 2024-11-25 09:23:38
 */
@Service
public class InspectionDetailsServiceImpl extends ServiceImpl<InspectionDetailsMapper, InspectionDetails>
        implements InspectionDetailsService {


    @Autowired
    private DeviceRulesService deviceRulesService;
    @Autowired
    private CodeRules codeRules;
    @Autowired
    private InspectionDetailsMapper inspectionDetailsMapper;
    @Autowired
    private RedisUtil redisUtil;

    @Override
    public String addInspectionDetail(InspectionDetails inspectionDetails) {
        System.out.println("inspectionDetails:" + inspectionDetails.toString());

        try {
            System.out.println("更新设备维修经验库");
            // 尝试将数据插入数据库
            if (inspectionDetailsMapper.insert(inspectionDetails) > 0) {
                // 定义Redis的键
                String redisKey = "DetailList:";
                try {
                    // 从数据库获取当前所有数据
                    String condition = "";
                    String type = "";
                    List<InspectionDetails> detailsList = inspectionDetailsMapper.selectList(null); // 可以根据需要替换为实际查询条件
                    // 将更新后的数据写入Redis
                    redisUtil.set(redisKey, detailsList);
                } catch (Exception e) {
                    // 处理Redis操作异常
                    System.err.println("Redis更新失败: " + e.getMessage());
                    // 这里可以根据实际情况决定是否要抛出异常或者进行其他处理
                }
                return "添加成功";
            } else {
                return "添加失败";
            }
        } catch (Exception e) {
            // 处理数据库操作异常
            System.err.println("数据库操作失败: " + e.getMessage());
            return "添加失败";
        }
    }

    @Override
    public List<InspectionDetails> selectDetail(String code) {
        String redisKey = "DetailList:";
        System.out.println("code:" + code);

        if (redisUtil.hasKey(redisKey)) {
            redisUtil.del(redisKey);
            System.out.println(1);
            System.out.println("DetailList-从Redis中获取数据");
            List<InspectionDetails> detailsList;
            detailsList = (List<InspectionDetails>) redisUtil.get(redisKey);
            return detailsList;
        } else {
            System.out.println(4);
            System.out.println("在数据库中查询DetailList");
            List<InspectionDetails> detailsList;

            System.out.println(6);
            detailsList = inspectionDetailsMapper.selectDetail(code); // 获取所有数据
            // 将数据存入Redis
            redisUtil.set(redisKey, detailsList);
            return detailsList;
        }


    }

    @Override
    public Page<InspectionDetails> selectIns(int page, int size, String deviceCode) {
        // 定义Redis中的键
        String redisKey = "DeInsList:";
        System.out.println("deInsList-condition:" + deviceCode);
        // 先查缓存Redis
        if (redisUtil.hasKey(redisKey)) {
            System.out.println(1);
            System.out.println("DeInsList-从Redis中获取数据");
            List<InspectionDetails> detailList;
            detailList = (List<InspectionDetails>) redisUtil.get(redisKey);
            // 使用PageUtil进行分页
            return PageUtil.paginate(detailList, page, size);
        } else {
            System.out.println(4);
            System.out.println("在数据库中查询DeInsList");
            List<InspectionDetails> detailList;
            detailList = inspectionDetailsMapper.selectIns(deviceCode);
            redisUtil.set(redisKey, detailList);
            // 使用PageUtil进行分页
            return PageUtil.paginate(detailList, page, size);
        }
    }

    @Override
    public String updateDetailState(InspectionDetails inspectionDetails) {
        System.out.println("inspectionDetails:" + inspectionDetails.toString());

        try {
            System.out.println("更新设备维修经验库");
            // 尝试将数据插入数据库
            UpdateWrapper uw = new UpdateWrapper();
            uw.set("state", inspectionDetails.getState());
            uw.set("is_judge", inspectionDetails.getIsJudge());
            uw.eq("code", inspectionDetails.getCode());
            if (inspectionDetails.getProject() != null || inspectionDetails.getProject() != "") {
                uw.eq("project", inspectionDetails.getProject());

            }
            uw.eq("code_type", inspectionDetails.getCodeType());

            if (inspectionDetailsMapper.update(inspectionDetails, uw) > 0) {
                // 定义Redis的键
                String redisKey = "DetailList:";
                try {
                    // 从数据库获取当前所有数据
                    String condition = "";
                    String type = "";
                    List<InspectionDetails> detailsList = inspectionDetailsMapper.selectList(null); // 可以根据需要替换为实际查询条件
                    // 将更新后的数据写入Redis
                    redisUtil.set(redisKey, detailsList);
                } catch (Exception e) {
                    // 处理Redis操作异常
                    System.err.println("Redis更新失败: " + e.getMessage());
                    // 这里可以根据实际情况决定是否要抛出异常或者进行其他处理
                }
                return "修改成功";
            } else {
                return "修改失败";
            }
        } catch (Exception e) {
            // 处理数据库操作异常
            System.err.println("数据库操作失败: " + e.getMessage());
            return "修改失败";
        }
    }

    @Override
    public List<InspectionDetails> selectDe(String code) {
        return inspectionDetailsMapper.selectDe(code);
    }

    @Override
    public List<InspectionDetails> selectInspection(String code,String condition, String type, String content) {
        return inspectionDetailsMapper.selectInspection(code,condition,content,type);
    }

    @Override
    public List<InspectionDetails> selectPmts(String code, String condition) {
        return inspectionDetailsMapper.selectPmts(code,condition);
    }
}




